package com.qing.qingcodegenerate.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import com.qing.qingcodegenerate.model.dto.chathistory.ChatHistoryAddRequest;
import com.qing.qingcodegenerate.model.dto.chathistory.ChatHistoryQueryRequest;
import com.qing.qingcodegenerate.model.entity.ChatHistory;
import com.qing.qingcodegenerate.model.entity.User;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import jakarta.servlet.http.HttpServletRequest;

import java.time.LocalDateTime;
import java.util.List;

/**
 *  服务层。
 *
 * @author 86157
 * @since 2025-08-09
 */
public interface ChatHistoryService extends IService<ChatHistory> {

    /**
     *  加载聊天历史到内存
     * @param appId
     * @param chatMemory
     * @param maxCount
     * @return
     */
    int loadChatHistoryToMemory(Long appId, MessageWindowChatMemory chatMemory, int maxCount);

    /**
     * 添加聊天历史
     *
     * @param appId 应用id
     * @param message 机器人回复
     * @param messageType 消息类型
     * @param userId 用户id
     * @return 是否成功
     */
    void addChatHistory(long appId, String message, String messageType, Long userId);


    /**
     * 根据应用id删除所有聊天历史
     *
     * @param appId 应用id
     * @return 是否成功
     */
    boolean deleteByAppId(Long appId);

    /**
     * 根据应用id分页查询聊天历史
     *
     * @param appId 应用id
     * @param pageSize 分页大小
     * @param lastCreateTime 最后创建时间
     * @param loginUser 登录用户
     * @return 聊天历史分页数据
     */
    public Page<ChatHistory> listAppChatHistoryByPage(Long appId, int pageSize,
                                                      LocalDateTime lastCreateTime,
                                                      User loginUser);

    /**
     * 获取查询条件
     * @param chatHistoryQueryRequest
     * @return
     */
    QueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);


}
